#!/usr/bin/env python

import random
import re
import numpy
from sklearn.cluster import KMeans
from sklearn.metrics import confusion_matrix

k=20
max_valor=99999
n1=100

print('Importando vetores descritores...')
# Abrindo e lendo arquivo contendo os vetores descritores.
arq_dataset = open('../saida/desc' + str(n1))
dataset = arq_dataset.readlines()
for i in range(len(dataset)):
   dataset[i] = re.findall(r"[\w']+",dataset[i]) # Dando um split na linha do descritor
dataset = [[int(column) for column in row] for row in dataset] # Convertendo dados de string para inteiro.
dataset = numpy.array(dataset) # Convertendo para array.
print(dataset)
print('Gerando sementes iniciais...')
centroides=[]
for semente in range(k):
   semente=[]
   for i in range(n1):
      semente.append(random.randint(0,max_valor))
   centroides.append(semente)
centroides = numpy.array(centroides)
print(centroides)

# Primeiro, instancia o classificador com os parametros desejados.
kmeans = KMeans(init=centroides, n_clusters=k)

# Segundo, treinamento.
kmeans.fit(dataset)

# Imprime na tela os centroides finais.
print('Centroides finais:')
print(kmeans.cluster_centers_)

# Terceiro, teste, usando o mesmo dados do treinamento.
resultado = kmeans.predict(dataset) 
print('Resultado da clusterizacao:')
print(resultado)

# Label real de cada amostra
print('Importando grupos corretos...')
arq_dataset = open('../saida/grupos_corretos')
objetivo = arq_dataset.read()
objetivo = re.findall(r"[\w']+",objetivo) # Dando um split na linha do descritor
objetivo = [int(row) for row in objetivo]
objetivo = numpy.array(objetivo) # Convertendo para array.
print(objetivo)

#matriz de confusao
print('Matriz de confusao:')
cm = confusion_matrix(objetivo, resultado)
print(cm)
